﻿////////////////////////////////////////////////////////////////////////////////////////////////////
//
//  © 2012 Stanislav S. Yarmonov.
//
//  TODO:LICENSE
//     
////////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Data;

namespace Pandora.Data
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Extensions for IDbDataParameter interface.
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////
    public static class IDbDataParameterExtensions
    {
        #region -- Getting values ------------------------------------------------------------------
        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get Int16 paramater value.
        /// </summary>
        /// <param name="parameter">
        /// Parameter to get the value from.
        /// </param>
        /// <returns>
        /// Value returned.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static Int16? AsInt16(this IDbDataParameter parameter)
        {
            return parameter.Value != DBNull.Value ? parameter.Value as Int16? : null;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get Int32 paramater value.
        /// </summary>
        /// <param name="parameter">
        /// Parameter to get the value from.
        /// </param>
        /// <returns>
        /// Value returned.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static Int32? AsInt32(this IDbDataParameter parameter)
        {
            return parameter.Value != DBNull.Value ? parameter.Value as Int32? : null;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get Int64 paramater value.
        /// </summary>
        /// <param name="parameter">
        /// Parameter to get the value from.
        /// </param>
        /// <returns>
        /// Value returned.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static Int64? AsInt64(this IDbDataParameter parameter)
        {
            return parameter.Value != DBNull.Value ? parameter.Value as Int64? : null;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Get string paramater value.
        /// </summary>
        /// <param name="parameter">
        /// Parameter to get the value from.
        /// </param>
        /// <returns>
        /// Value returned.
        /// </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////
        public static string AsString(this IDbDataParameter parameter)
        {
            return parameter.Value != DBNull.Value ? parameter.Value as string : null;
        }
        #endregion ---------------------------------------------------------------------------------
    }
}
